Coroutine Builders (launch, async)
কটলিনে Coroutines ব্যবহার করে অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং করা যায়, যা জাভা থ্রেডিংয়ের তুলনায় বেশি হালকা এবং কার্যকর। Coroutine Builders, যেমন launch এবং async, coroutine তৈরি করার জন্য ব্যবহৃত হয়। নিচে এই দুটি Coroutine Builder এর কার্যকারিতা এবং ব্যবহারের উদাহরণ নিয়ে বিস্তারিত আলোচনা করা হলো।
১. Coroutine Basics
কটলিনে Coroutine হলো একটি লাইটওয়েট থ্রেড যা অ্যাসিঙ্ক্রোনাস অপারেশন এবং ব্যাকগ্রাউন্ড টাস্ক সম্পাদনের জন্য ব্যবহৃত হয়। Coroutine ব্যবহার করে আপনি একটি সময়সীমার মধ্যে অনেক কাজ সম্পন্ন করতে পারেন, এবং এগুলো অন্যান্য থ্রেডের তুলনায় কম মেমরি ব্যবহার করে।
২. launch Coroutine Builder
launch Coroutine Builder একটি নতুন coroutine তৈরি করে এবং এটি একটি Job রিটার্ন করে। এটি সাধারণত এমন কাজের জন্য ব্যবহার করা হয় যেখানে আপনি একটি Coroutine তৈরি করতে চান এবং কিছু করার পরে ফলাফল ফেরত দেওয়ার প্রয়োজন নেই।
উদাহরণ:
import kotlinx.coroutines.*
fun main() = runBlocking {
launch {
delay(1000L) // ১ সেকেন্ডের জন্য বিলম্বিত হবে
println("Coroutine finished!")
}
println("Hello,")
}
ব্যাখ্যা:
runBlockingএকটি coroutine scope তৈরি করে যা মেইন থ্রেড ব্লক করবে যতক্ষণ না এর সমস্ত coroutine সম্পন্ন হয়।launchCoroutine Builder ব্যবহার করে একটি নতুন coroutine তৈরি করা হয়েছে যা ১ সেকেন্ড বিলম্বিত হয়ে"Coroutine finished!"প্রিন্ট করবে।"Hello,"প্রিন্ট হবে প্রথমে, কারণ এটি Coroutine এর বাইরে।
৩. async Coroutine Builder
async Coroutine Builder একটি নতুন coroutine তৈরি করে এবং Deferred রিটার্ন করে। এটি সাধারণত তখন ব্যবহার করা হয় যখন আপনি ফলাফল প্রাপ্ত করতে চান। async-এর মাধ্যমে করা কাজটি শেষ হলে আপনি await ব্যবহার করে ফলাফল পেতে পারেন।
উদাহরণ:
import kotlinx.coroutines.*
fun main() = runBlocking {
val deferredResult = async {
delay(1000L) // ১ সেকেন্ডের জন্য বিলম্বিত হবে
42 // ফলস্বরূপ মান
}
println("The answer is ${deferredResult.await()}") // আউটপুট: The answer is 42
}
ব্যাখ্যা:
- এখানে
asyncCoroutine Builder ব্যবহার করে একটি coroutine তৈরি করা হয়েছে যা ১ সেকেন্ড পরে ৪২ ফেরত দেবে। deferredResult.await()ব্যবহার করে coroutine এর কাজ শেষ হওয়ার পর ফলাফল পাওয়া যায়।
৪. launch এবং async এর মধ্যে পার্থক্য
| Features | launch | async |
|---|---|---|
| Return Type | Job | Deferred<T> |
| Purpose | Fire-and-forget tasks | To get a result |
| Usage | When you don't need a result | When you need a result |
৫. Structured Concurrency
কটলিনের coroutine ব্যবস্থাপনায় Structured Concurrency খুবই গুরুত্বপূর্ণ। এটি নিশ্চিত করে যে সমস্ত coroutine-এর সম্পন্ন হওয়া এবং ব্যবস্থাপনায় একটি পরিষ্কার ও নিরাপদ পদ্ধতি রয়েছে।
উদাহরণ:
import kotlinx.coroutines.*
fun main() = runBlocking {
// Multiple coroutines within the same scope
launch {
delay(500L)
println("Task from launch")
}
async {
delay(1000L)
println("Task from async")
}.await()
println("Main coroutine finished")
}
ব্যাখ্যা:
- এখানে
launchএবংasyncউভয়ই একইrunBlockingscope এর ভেতরে কাজ করছে। এটি নিশ্চিত করে যে মেইন coroutine শেষ না হওয়া পর্যন্ত সকল coroutine সম্পন্ন হবে।
উপসংহার
কটলিনের Coroutine Builders, যেমন launch এবং async, অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ের জন্য একটি শক্তিশালী উপায় প্রদান করে। launch ব্যবহার করে আপনি সহজে Coroutine তৈরি করতে পারেন যখন ফলাফল প্রয়োজন হয় না, আর async ব্যবহার করে আপনি ফলাফল প্রাপ্ত করতে পারেন। এই ফিচারগুলো প্রোগ্রামিংকে আরও কার্যকর এবং সমন্বিত করে তোলে।
Read more